package AudioUDP;
// <![CDATA[
// ServerUDP.java
//        exemple d'utilisation des sockets UDP Java Sockets 
//        agent Serveur 
// 

import java.net.*;
import java.io.*;
import java.util.*;

public class ServerUDP
{ 
    // on utilise des port >1024 pour ne pas avoir de pb de droits
    final static int PORT_SERVEUR = 2510;
    final static int TAILLE_MAX_BUFFER=100;
    static Player monPlayer = new Player();
    
    
    public static void main(String[] args)
    {
	// le buffer in est dimentionnés à la taille du plus grand message 
	// du protocole,
      
	byte[] bufferin = new byte[TAILLE_MAX_BUFFER];

	// 
	int compteur = 0;
	String reponse;
	DatagramSocket datagramSocket = null;
	DatagramPacket inPacket = null;
	DatagramPacket outPacket = null;
	InetAddress addr = null;
	ArrayList<byte[]> mesBuffer = new ArrayList();
	boolean statut = false;

	try
	    { // create socket
		datagramSocket = new DatagramSocket(PORT_SERVEUR);

		while(true)
		    {
			// Le serveur est pret, il attend les clients
			System.out.println("Waiting for client requests");
			inPacket = new DatagramPacket(bufferin, bufferin.length);		       
			datagramSocket.receive(inPacket);

			// Un requete est arrivée on la traite directement
			// pendant ce temps là les autres clients attendent

			// Interpreter le flux
			mesBuffer.add(compteur, inPacket.getData());
			//byte[] buf = new byte[inPacket.getLength()];
			//buf = inPacket.getData();
			
			System.out.println("Paquet reçu n° "+ compteur + " ! :)");
			compteur++;
			//monPlayer.play(buf);
			if(compteur>70){
				for(int i=0;i<compteur-1;i++){
					monPlayer.play(mesBuffer.get(i));
				}
				compteur=0;
			}
			
			//former le flux reponse
			if(compteur >70){
			statut = !statut;
			reponse = String.valueOf(statut);
			//le pacquet emit est dimentionné au plus juste
			outPacket = new DatagramPacket(
                                  reponse.getBytes(), 
                                  reponse.length(),
                                  inPacket.getAddress(),
                                  inPacket.getPort());
			datagramSocket.send(outPacket);
		    }
		    }
	    } catch (Exception e)
		{ System.err.println("Closing DatagramSocket");
		if (datagramSocket != null)
		    datagramSocket.close();
		}
    }
}

//]]>
